/**
 * 认证中间件
 * 用于验证用户是否已登录
 */
const jwt = require('jsonwebtoken')
const ApiResponse = require('../utils/response')
const authConfig = require('../config/auth')

/**
 * 验证JWT token的中间件
 * @param {Object} req - Express请求对象
 * @param {Object} res - Express响应对象
 * @param {Function} next - Express下一个中间件函数
 */
function authMiddleware(req, res, next) {
	// 检查当前路径是否在排除列表中
	const path = req.path
	console.log('请求路径:', path)
	console.log('排除路径列表:', authConfig.jwt.excludePaths)
	if (authConfig.jwt.excludePaths.includes(path)) {
		console.log('路径在排除列表中，跳过认证')
		return next()
	}

	// 从请求头中获取token
	const authHeader = req.headers.authorization
	console.log('Authorization头:', authHeader)
	const token = authHeader && authHeader.split(' ')[1] // Bearer TOKEN格式
	console.log('提取的token:', token)

	if (!token) {
		console.log('未提供token')
		return res.status(401).json(ApiResponse.unauthorized())
	}

	try {
		// 验证token
		console.log('使用secret验证token:', authConfig.jwt.secret)
		const decoded = jwt.verify(token, authConfig.jwt.secret)
		console.log('token验证成功，解码结果:', decoded)

		// 将用户信息添加到请求对象中
		req.user = { id: decoded.id }

		// 继续下一个中间件
		next()
	} catch (error) {
		console.error('Token验证失败:', error.message)
		return res.status(401).json(ApiResponse.unauthorized('认证失败: ' + error.message))
	}
}

module.exports = authMiddleware
